#ifndef _SERIAL_H_
#define	_SERIAL_H_

// Serialdriver (Codename "Yuan Tseh Lee")

// Abkürzungen
#define DBGU_BASE		(0xFFFFF200)					//Basisadresse zur Debugunit
#define DBGU_CR			(volatile unsigned int*)(DBGU_BASE + 0x0000)	//Control Register
#define DBGU_THR		(volatile unsigned int*)(DBGU_BASE + 0x001C)	//Transmit Holding Register
#define DBGU_SR			(volatile unsigned int*)(DBGU_BASE + 0x0014)	//Status Register

//Bitmasken
#define TXEN		 	(1<<6)						//Transmitregister aktivieren
#define TXDIS			(1<<7)						//Transmitregister deaktivieren

#define TXRDY			(1<<1)						//Status Ready
#define ENDTX			(1<<4)						//Transfer beendet


// Funktionen zum Schreiben eines Buchstaben oder Strings

void writechar(char ch);	//schreiben eines einzelnen Chars
void write(char *str);		//schreiben eines Strings von einem Charpointer

/*
 * Die Funktion void printf (char *str, ...) implementiert die Ausgabe auf der
 * seriellen Schnittstelle. Achtung: Es sind maximal 1024 Zeichen sind möglich!
 * 
 * str : zu sendender String
 *
 * Formatierungszeichen:
 *  \%d \%i  decimal signed integer
 *  \%o      octal integer
 *  \%x \%X  hex integer
 *  \%u      unsigned integer
 *  \%c      character
 *  \%s      string
 *  \%f      double
 *  \%e \%E  double
 *  \%g \%G  double
 *  \%p      pointer
 *  \%n      number of characters written by this printf
 *           no argument expected
 *  \%\%  \% no argument expected
*/
void printf (char *str, ...);

#endif // _SERIAL_H_

